package server

import (
	"errors"
	"go-websocket/model"
	"nhooyr.io/websocket"
)

var usersManage *UsersService

type UsersService struct {
	users map[int]*model.User
}

// 构造函数
func NewUsersServer() {
	usersManage = &UsersService{users: make(map[int]*model.User)}
}

// 获取用户管理器
func GenUsersManage() *UsersService {
	return usersManage
}

// 是否在线
func (u *UsersService) IsOnline(user *model.User) bool {
	if _, ok := u.users[user.Uid]; ok {
		return true
	}
	return false
}

// 新增一个用户至在线目录
func (u *UsersService) Add(user *model.User) error {
	if u.Has(user) {
		return errors.New("用户已存在")
	}
	u.users[user.Uid] = user
	return nil
}

// 检测在线目录中是否存在
func (u *UsersService) Has(user *model.User) bool {
	if _, ok := u.users[user.Uid]; ok {
		return true
	}
	return false
}

// 从在线目录中移除
func (u *UsersService) Remove(user *model.User) error {
	if !u.Has(user) {
		return errors.New("用户不存在")
	}
	delete(u.users, user.Uid)
	return nil
}

// 获取在线用户fd
func (u *UsersService) GenUserFd(user *model.User) (*websocket.Conn, error) {
	if u.IsOnline(user) {
		return u.users[user.Uid].Conn, nil
	}
	return nil, errors.New("该用户不在线")
}